Thực thi cache CPU cache

Số lần truy cập có kết quả là cache hit được gọi là hit rate, và có thể được xem như là thước đo độ hiệu quả cache của một chương trình hay thuật toán.

Lỗi đọc nhầm làm quá trình xử lý bị chậm lại vì cần phải lấy dữ liệu từ bộ nhớ chính nên chậm hơn nhiều so với đọc từ cache. Lỗi viết nhầm có thể xuất hiện nhưng không nặng đến thế, vì bộ xử lý có thể tiếp tục xử lý khi mà dữ liệu được sao chép vào bộ nhớ chính trong chế độ ngầm.

Để tạo chỗ cho một entry mới khi mà cache miss, cache có thể sẽ hủy một trong số những entry hiện có. Replacement policy là nguồn gốc của hoạt động trên. Vấn đề cơ bản của bất cứ replacement policy nào là nó phải dự đoán được cache entry đang tồn tại nào sẽ không được dùng nữa. Dự đoán là một chuyện rất khó nên không có cách nào hoàn hảo trong số các replacement policy hiện hữu.

Một trong số replacement policy, LRU, thay thế entry được truy cập ít nhất trong thời gian gần đây.

Đánh dấu một số phần bộ nhớ là non-cacheable có thể nâng cao hiệu suất làm việc do tránh được những phần bộ nhớ hiếm khi truy cập. Điều này tránh trường hợp cho một cái gì vào cache mà không tái sử dụng. Cache entries có thể bị tắt hoặc khóa tùy vào trường hợp.

Nếu dữ liệu được viết vào cache, đến lúc nào đó nó cũng sẽ phải được đưa vào bộ nhớ chính; thời điểm viết được biết đến là write policy. Trong write-through cache, mỗi lần viết vào cache thì cũng viết vào bộ nhớ chính. Thay vào đó, trong write-back hay copy-back cache, mỗi lần viết không đồng bộ vào bộ nhớ chính ngay lập tức, mà cache tìm lại những địa điểm đã được viết vào cache, đánh dấu chúng là dirty.Dữ liệu ở những địa điểm này chỉ được viết vào bộ nhớ chính chỉ khi dữ liệu đó bị xóa ở cache.Vì lý do này, một lỗi đọc nhầm trong write-back cache có thể có 2 dịch vụ truy cập dữ liệu: một để viết từ dirty location vào bộ nhớ chính, và cái còn lại để đọc vị trí mới từ bộ nhớ chính. Ngoài ra, một lần viết vào một vị trí trong bộ nhớ chính mà chưa được định vị trong write-back cache có thể xóa đi một dirty location, từ đó giải phóng dung lượng cache cho vị trí mới.

Thêm vào đó cũng có nhiều intermediate policy nữa. Cache có thể là write-through, nhưng bản ghi có thể nằm tạm thời trong hàng chờ lưu trữ dữ liệu, thường là để có thể lưu nhiều bản ghi một lúc.

Dữ liệu được cache từ bộ nhớ chính có thể bị thay đổi bởi nhiều yếu tố, trong trường hợp mà bản sao trong cache có thể bị lỗi thời hay mất hiệu lực. Thay vào đó khi một CPU thuộc một hệ thống đa xử lý cập nhật dữ liệu trong cache, các bản sao của dữ liệu trong cache liên quan đến các CPU khác mất hiệu lực. Các quy trình trao đổi giữa các cache manager để thống nhất dữ liệu thì được gọi là cache coherence protocols.

Thời gian lấy một cache line từ bộ nhớ chính rất quan trọng vì CPU sẽ phải đợi cache line. Khi CPU đạt tình trạng này, nó được gọi là stall. Khi CPU trở nên nhanh hơn so với bộ nhớ chính, stalls do có cache misses nên không làm được nhiều phép tính tiềm năng hơn; CPU hiện đại có thể thực hiện hàng trăm chỉ dẫn trong thời gian lấy một cache line từ bộ nhớ chính.

Nhiều phương pháp có thể được sử dụng để giữ CPU làm việc hiệu quả trong thời gian này, bao gồm cả out-of-order execution, mà trong đó CPU cố thực hiện những chỉ dẫn độc lập nằm sau chỉ dẫn đang đợi dữ liệu cache miss. Một công nghê khác được sử dụng bởi nhiều bộ xử lý là simultaneous multithreading (SMT), hay hyper-threating, cho phép một thread khác sử dụng lõi CPU trong khi thread đầu tiên đợi tài nguyên của CPU sẵn sàng.